#include<stdio.h> #include<string.h> int main() { ] = "abcd"; //常指针a指向字符串常量"abcd"的首地址,a不能被改变(不可作为左值被重新赋值) char *f = "abcd"; //f指向"abcd",上面a和这个f除了a是常指针之外没有区别,f可以作为左值 ] = "safajshjf"; //常指针b指向&qu…
1.以字符串形式出现的,编译器都会为该字符串自动添加一个\0作为结尾 如在代码中写"abc",编译器帮你存储的是"abc\0". 2.数组的类型是由该数组所存放的东西的类型以及数组本身的大小决定的,如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4] 字符串常量的类型可以理解为相应字符常量数组的类型,如"abc"的类型可以看成是const char[4] 3.字符数组和指针的区别 (1)把&qu…
复习 只要把地址拿到就能这么操作.. (这里是合法的地址,不是野指针) 只有定义变量后,此变量的地址才是合法的地址 野指针就是保存没有意义地址的指针变量 操作野指针变量本身不会有任何问题 操作野指针所指向的内存才导致段错误 (操作系统的内存不是你想用就用的) 0 ‘\0’ NULL是一个东西 02 作业讲解 03 指针数组 指针数组 它是数组 03 数组指针 int *p[10]; (!注意: char *a, int *b, double *c 的size of 都是4 应该是根据编译器 就像…
老套的笔试题 在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true. String s1 = new String("xyz"); String s2 = "xyz"; System.out.println(s1 == s2); System.out.println(s1.equals(s2)); 对于这种题,你总能很快的给出标准答案:==比较的是对象地址,equals方法比较的是真正的字符数组.所…
数组名同时也是该数组首元素的地址,而指针提供了一种用来使用地址的符号方法,因此指针能够很有效地处理数组. 将一个整数加给指针,这个整数会和指针所指类型的字节数相乘,然后所得的结果会加到初始地址上 date + == &date[]; // 相同的地址 *(date + ) == date[]; // 相同的值 在函数原型或函数定义头的场合中(并且也只有在这两种场合中),可以用int ar[]代替int* ar,处理数组的函数实际上是使用指针做为参数的 int sum(int* ar, int n…
[转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍. 因为*操作符是左操作符,左操作符的优先级是从右到左,对于…
此次博客是转载某位博主的文章,不过现在找不到了,所以先声明一下. 先贴一段代码: #include <stdio.h> int main(int argc, const char** argv) { char str_1[6] = "Crazy1"; char* str_2 = "Crazy2"; if (str_1 == "Crazy1") { printf("%s\n", "字符数组OK")…
在做面试100题中第21题时,发现char *astr="abcdefghijk\0";和char astr[]={"abcdefghijk"};有点区别,以前一直以为是一样的,但是在该程序中采用字符串指针运行一直出错.后来在网上查查,果然发现大大的不同. 展示如何出错 分析:当你需要修改字符串时,采用指针指向该字符串编译通过但是运行出错,而采用字符串数组时不会出现这样的问题.我们知道计算机有堆栈空间供编程人员使用,第一行,astr为栈上分配的一个指针,而右边在堆上…
char b[] = "hello"; 则“hello”存于栈中,因为定义的是一个数组. char *b = "hello"; 则"hello"存于静态存储区中,因为定义了一个字符串常量,并把它的地址赋给了b. 如果此时在指针仍然指向静态存储区的情况下通过指针修改其指向的地方,则程序能通过编译,但运行时会报“segmention fault”…
非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int &rr = 32 // error 而且: 非const引用只能绑定到与该引用同类型的对象: const引用则可以绑定到不同但相关的类型的对象或绑定到右值://左值:可以出现在赋值语句的坐标或右边:右值:只能出现在赋值的右边. 当进行string对象和字符串字面值混合连接操作是,+操作符的左右操作数…