标签:
网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记
sizeof(int); sizeif(i);
{
int a;
a =6;
printf("sizeof(int)=%ld\n",sizeif(int));
printf("sizeof(a)=%d\n",sizeof(a));
return 0;
}
--->sizeof(int)=4
sizeof(a)=4
运算符 &
scanf(“%d”,&i);里的 &
· 取得变量的地址,它的操作数必须是变量
int i;prinf("0x%x",&i);
–>Ox9ffe4c //%x 16进制
地址的大小是否与int相同,取决于编译器
· & 可以帮忙取出一个变量的地址,但是这个地址的大小,数据类型,与int是否相等取决于编译器,取决于是64还是32位架构
int i;printf("%p",&i);
要输出地址,用%p,而不是直接当成整数,地址和整数不总是相等的
{
int i=0;
printf("0x%x\n",&i);
printf("%p\n",&i);
printf("%lu\n",sizeof(int));
printf("%lu\n",sizeof(&i));
return 0;
}
--->0xbff62d6c
0xbff62d6c
4 4
8(64位) 4(32位)
{
int i =0;
int p;
printf("%p\n",&i);
printf("%p\n",&p);
return 0;
}
--->0xbff81d6c
0xbff81d68 堆栈stack自顶向下
int a[10];
printf("%p\n",&a);
printf("%p\n",a);
printf("%p\n",&a[0]);
printf("%p\n",&a[1]);
return 0;
--->0xbff8dd44
0xbff8dd44
0xbff8dd44
0xbff8dd48 -->&a==a==&a[0]
scanf
就是保存地址的变量
int i;
int* p=&i;
*表示p是一个指针,它指向一个int,把i的地址给了p int* p,q;
*可以靠近int也可以靠近P,但意思一样,说明P是一个指针,指向一个int int *p,q;
而q只是一个普通的int类型的变量 *不是加给了int,而是加给了p 指针变量 变量的值是内存的地址
· 普通变量的值是实际的值
· 指针变量的值是具有实际值的变量的地址
#include<stdio.h>
void f (int* p);
void g (int k);
int main(void){
int i=6;
printf("&i=%p\n",&i); //看下i的地址
f(&i);
g(i);
return 0;
}
void f (int *p){ //p得到的是i的地址,使得拥有了能够访问外面的i的能力了
printf(" p=%p\n",p);
printf("*p=%d\n",*p); //*和指针变量p放在一起作为一个整体,表示一个整数
*p=26; //实际是对i做的
}
void g (int k){ //在g里面k变量得到的只是i的值,跟外面的i没有任何关系
printf(" k=%d\n",k);
}
===>&i=0xbffbcd70
p=0xbffbcd70
*p=6
k=26 //经历了f函数的调用,i的值被改了
scanf("%c",&c);-->1
scanf("%d",&i);-->49
if(49==‘1‘){printf("OK");} --->OK
int main (void){
char c;
char d;
c=1;
d=‘1‘;
if(c==d){
printf("相等\n");
}else{
printf("不相等\n");
}
printf("c=%d\n",c);
printf("d=%d\n",d);
return 0;
}
--->不相等
c=1
d=49
int main (void){
char c;
scanf("%c",&c);
printf("c=%d\n",c);
printf("c=%c\n",c);
return 0;
}
输入:1
输出:c=49
c=1
int main (void){
int c;
scanf("%d",&c);
printf("c=%d\n",c);
printf("c=%c\n",c);
return 0;
}
输入:1
输出:c=49
c=" "
int main (void){
int i;
int c;
scanf("%d",&i);
c=i; //整数49交给了c
printf("c=%d\n",c); //c做为整数输出是49
printf("c=‘%c‘\n",c); //c做为字符输出是1
return 0;
}
输入:49
输出:c=49
c="1"
scanf("%d %c",&i,&c);
scanf("%d%c",&i,&c);
char c=‘A‘; c++; printf("%c\n",c);--->B
int i=‘Z‘-‘A‘; printf("%d\n",i);--->25
printf("请分别输入身高的英尺和英寸","如输入\"5 7\"表示5英尺7英寸:")
字符 | 意义 | 字符 | 意义 |
---|---|---|---|
\b | 回退一格 | \” | 双引号 |
\t | 到下一个表格位 | \’ | 单引号 |
\n | 换行 | \|反斜杠本身 | |
\r | 回车 |
word[0] | H |
---|---|
word[1] | e |
word[2] | l |
word[3] | l |
word[4] | o |
word[5] | ! |
word[0] | H |
---|---|
word[1] | e |
word[2] | l |
word[3] | l |
word[4] | o |
word[5] | ! |
word[6] | \0 |
[注]: C语言70年代更注重处理数字,80年代之后的语言才开始侧重处理信息,处理字符串
scanf ("%7s",string);
int main()
{
char word[8];
char word2[8];
scanf ("%s",word);
scanf ("%s",word2);
printf("%s##%s##\n",word,word2);
}
输入hello world!
输出hello##world!##
#include<string.h>
size_t strlen(const char *s)
返回s的字符串长度(不包括结尾的0)#include<stdio.h>
#include<string.h>
int main(void)
{
char line[] ="hello";
printf("strlen=%lu\n",strlen(line));
printf("sizeof=%lu\n",sizeof(line));
return 0;
}-->strlen=5
sizeof=6
int strcmp(const char *s1,const char *s2)
//compare比较#include<stdio.h>
#include<string.h>
int main(void)
{
char s1[] ="abc";
char s2[] ="Abc";
printf("%d\n",s1==s2);//数组的比较永远是false,因为两个数组永远不会是相同的地址,用==比较是否是相同的地址
printf("%d\n",strcmp(s1,s2));
return 0;
}-->0
1
char * strcpy(char *restrict dst,const char *restrict src);
//copy复制char * strcat(char *restrict s1,const char *restrict s2)
//链接char * strncpy(char *restrict dst,const char *restrict src,size_t n);
char * strncat(char *restrict s1,const char *restrict s2,size_t n)
int strncmp(const char *s1,const char *s2,size_t n)
char *strchr(const char *s,int c);
char *strrchr(const char *s,int c);
int a[] = {5, 15, 34, 54, 14, 2, 52, 72};
int *p = &a[5];
int a[] = {0};int *p = a;
则以下哪些表达式的结果为真? char* s;scanf("%s", s);
int* p,q;
中,p和q都是指针。 ‘b‘-‘a‘
网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记
标签:
原文地址:http://blog.csdn.net/mushan_cj/article/details/51399332