程序设计入门-C语言 翁恺 第8周 指针与字符串
2020-03-31 07:42
253 查看
//第8周指针与字符串 //sizeof #include<stdio.h> int main() { int a; a=6; printf("sizeof(int)=%ld\n",sizeof(int)); //sizeof(double) printf("sizeof(a)=%ld\n",sizeof(a)); //sizeof(a) printf("sizeof(double)=%ld\n",sizeof(double));//sizeof(int) return 0; } //& 取地址符 操作数必须是变量 #include<stdio.h> int main(void) { int i = 0; //本地变量分配在内存stack,自顶向下 int p; p = &i; printf("0x%x\n",&i); //&i是地址不应该用%x 用地址%p printf("%p\n",&i); // 用地址%p 地址格式占位符 ,输出地址 printf("0x%p\n",&i); // 用地址%p printf("%p\n",p); printf("%p\n",&p);//自顶向下,差4个字节 printf("%x\n",p); printf("%lu\n",sizeof(int)); printf("%lu\n",sizeof(&i)); //地址8个字节 return 0; } //& 取地址符 数组的地址 #include<stdio.h> int main(void) { int a[10]; printf("%p\n",&a); printf("%p\n",a); //数组名代表地址 printf("%p\n",&a[10]);//下标越界 printf("%p\n",&a[0]); printf("%p\n",&a[1]); return 0; } //& 取地址符 *p是一个int #include<stdio.h> void f(int *p); void g(int k); int main(void) { int i =6; printf("&i=%p\n",&i); f(&i); // g(i); return 0; } void f(int *p) { printf("p=%p\n",p); printf("*p=%d\n",*p); //*p==i *p=26; //写 对i做的 } void g(int k) { printf("k=%d\n",k); } //找数组中最大的数输出 #include<stdio.h> void minmax(int a[],int len,int *min,int *max); //函数参数表中的数组实际上是 指针 int main(void) { int a[]={1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55}; int min,max; printf("main sizeof(a)=%lu\n",sizeof(a)); printf("main a=%p\n",a); minmax(a,sizeof(a)/sizeof(a[0]),&min,&max); printf("a[0]=%d\n",a[0]); printf("min=%d,max=%d\n",min,max); int *p = &min; printf("*p=%d\n",*p); printf("p[0]=%d\n",p[0]); //把p所指的地方当做一个数组 printf("*a=%d\n",*a);//*也可以对数组做 return 0; } void minmax(int a[],int len,int *min,int *max) //函数参数表中的数组实际上是 指针 int *a { int i; printf("minmax sizeof(a)=%lu\n",sizeof(a)); printf("minmax a=%p\n",a); a[0] = 1000; *min = *max =a[0]; for(i=1;i<len;i++){ if(a[i] < *min){ *min = a[i];//当做数组来用它 } if(a[i]>*max){ *max = a[i]; } } } /*int isPrime(int x,int knownPrimes[],int umber0fKnownPrimes) { int ret = 1; int i; for(i=0;i<number0fKnowPrimes;i++) { if(x%knownPrimes[i] == 0){ ret = 0; break; } } return ret; }
//数组变量可以被看做是const的指针
数组不同于指针。
数组只有被作为参数传入到另一个函数里时,才等同于const指针。
因为直接对数组做sizeof,是可以得到总的字节数,而当数组被传入另外一个函数里使用时,就不能再使用sizeof获得总的字节数了。
数组名在参数传递中可以退化为指针,但它本身是一个地址常量而不是地址变量*/
#include<stdio.h> int main() { int a[]={1,2,3,4}; int *const p = a; // printf("sizeof(a)=%lu\n",sizeof(a)); printf("sizeof(p)=%lu\n",sizeof(p)); printf("sizeof(&p)=%lu\n",sizeof(&p)); return 0; } /*数组的sizeof和const指针的sizeof不相同,sizeof(p)得到的是存放指针的地址的长度, sizeof(a)得到的是存放数组的地址的总长度 */ /*理解: 数组变量是指 数组这种数据结构,sizeof(数组名)返回的是数组整体占据的内存大小; 而sizeof(指针)得到的是指针所对应地址的大小 */ //数组变量可以被看做是const的指针 #include<stdio.h> int main() { //const的指针是 指其指向的值可以改变,其地址不变 //围绕对指针的相关运算展开 int a[5]={0,1,2,3,4}; int *const p = a;//令p指向a printf("sizeof p = %d\n",sizeof(p));//p=8,是指针变量的长度 printf("sizeof a=%d\n",sizeof(a));//a=20,是整个数组的长度 //值 printf("*p = %d\n",*p); //*p=0 printf("*a = %d\n",*a); //*a=0 *p=1000; *a=1000; printf("*p=%d\n",*p);//*p=1000 printf("*a=%d\n",*a); //*a=1000 //地址 printf("p=%p\n",p);//p=0x10000 printf("a=%p\n",a);//a=0x10000//数组可以看作是const的指针 return 0; } //数组变量可以被看做是const的指针 #include<stdio.h> int main() { int *a; int b[9]; int c =0; a = &c; b = &c;//不能给数组变量赋值一个地址 printf("%p%p",a,b); return 0; } //8.2字符类型 character #include<stdio.h> int main() { char c; char d; c=1; d='1'; if(c==d){ printf("相等\n"); } else{ printf("不相等\n"); } printf("%d\n",c); printf("%d\n",d); scanf("%c",&c); printf("c=%d\n",c); printf("c='%c'\n",c); return 0; } //字符类型 #include<stdio.h> int main() { char i; char c; scanf("%d%c",i,c); printf("i=%d,c=%d,c=%c",i,c,c); scanf("%d %c",i,c); //有空格和无的区别 printf("i=%d,c=%d,c=%c",i,c,c); return 0; } //字符计算 char c='A'; c++; printf("%c\n",c); int i='Z'-'A'; printf("%d\n",i); //字符类型 逃逸字符 转义字符 #include<stdio.h> int main() { printf("123\bA\n456\n");//\b退一格 return 0; } //字符类型 逃逸字符 #include<stdio.h> int main() { printf("123\t456\n"); printf("12\t456\n"); // /t到下一个表格位 return 0; } //8.3字符数组 不是字符串 字符串变量 #include<stdio.h> int main() { int i =0; char *s ="Hello Word"; //s[0]='B'; //地址小,代码段,代码只读 char *s2 ="Hello World"; char s3[] = "Hello World"; printf("&i=%p\n",&i); printf("s=%p\n",s); printf("s2=%p\n",s2); printf("s3=%p\n",s3); s3[0]='B'; printf("Here!s[0]=%c\n",s[0]); printf("Here!s3[0]=%c\n",s3[0]); return 0; } //8.4 /*字符串计算 字符串的输入与输出 */ #include<stdio.h> int main() { char word[8]; //输入hello world char word2[8]; //输入 12345678 scanf("%7s",word); //scanf(“%s”,word);读入一个单词 scanf("%7s",word2);//地址 printf("%s##\%s##\n",word,word2); //##能看到结尾的边界在哪 return 0; } /*字符串长度strlen */ #include<stdio.h> #include<string.h> int main(int argc,char const *argv[]) { char line[]="Hello"; printf("strlen=%lu\n",strlen(line)); //长度 printf("strlen=%lu\n",sizeof(line)); return 0; } /*比较字符串strcmp */ #include<stdio.h> #include<string.h> int main(int argc,char const *argv[]) { char s1[]="abc"; char s2[]="Abc"; //S1==S2表达是她们是否是相同的地址 printf("%d\n",strcmp(s1,s2)); // == 0; > 1 ; < -1; printf("%d\n",'a'-'A'); return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记
- 慕课网程序设计入门——C语言( 翁恺老师)学习笔记2、指针
- 程序设计入门 - C语言( 翁恺) —— 第一周编程作业
- C语言及程序设计提高例程-28 字符串、字符数组、字符指针
- 第8周 C语言及程序设计提高例程-30 字符和字符串处理函数
- 慕课网程序设计入门——C语言( 翁恺老师)学习笔记1、tips
- 第7周 C语言及程序设计提高例程-28 字符串、字符数组、字符指针
- 程序设计入门-C语言 翁恺 第2周 计算
- C语言字符串指针变量与字符数组的区别
- 第1周 《C语言及程序设计》实践项目1——指针及其运算
- 第8周 C语言及程序设计提高例程-31 编制自己的字符串函数
- 【C语言】-指针和字符串
- C语言,用指针和联合体进行字符串反转ToUpper StrintFind ToLower
- 【C语言】使用指向指针数据的指针变量,输出一组字符串
- 【黑马程序员】C语言字符串指针介绍及使用
- C语言中指针, 数组和字符串(Pointer, Array and String in C Programming Language)
- C语言编程入门——指针(下)
- c语言字符串和指针十个问题
- C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])
- C语言二刷第七天:字符串(mooc视频;老师:翁恺)